import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.InputMismatchException;
import java.util.Scanner;

/**
 * The type Example.
 *
 * @author user
 */
public class Example {
    /**
     * The Logger.
     */
    static Logger logger=  LoggerFactory.getLogger(Example.class);
    private static int sum=100;

    /**
     * The entry point of application.
     *
     * @param args the input arguments
     */
    public static void main(String[] args) {
        do {
            try {
                System.out.println("Please enter the divisor");
                int number1 = new Scanner(System.in).nextInt();
                System.out.println("Please input the divisor is");
                int number2 = new Scanner(System.in).nextInt();
                logger.info(number1+" / "+number2+" = "+number1/number2);
            }catch (InputMismatchException e) {
                // Print error message in cmd
                logger.error("The input information is incorrect, please re-enter");
            }catch (ArithmeticException e){
                // Print error message in cmd
                logger.error("Program error, dividend cannot be 0");
            }catch (Exception e){
                // Print error message in cmd
                logger.error("unknown mistake");
            }finally{
                // End of program
                System.out.println("Enter y to continue calculation...");
            }
        }while ("y".equals(new Scanner(System.in).next()));
        logger.error("End of program");
//        System.out.println("returnValue() = " + returnValue());
//        System.out.println("returnValue() = " + returnValue());
//        System.out.println("returnValue() = " + returnValue());
    }
    private static int returnValue(){
        
        try{
            // 返回值为100
            return sum; 
        }catch (Exception ignored){
        }finally{
            // 注意点，当我们返回结果后我们这里的sum的值就发生了改变，变成了100

            /* finally代码块并非一定执行，在不进入try代码块或者程序被中止时就不会执行。:
            *
            * 当我们的 finally 及 try 代码块包含在其他代码块中的时候我们的代码块可能不被执行(选择结构)
            * System.exit()的作用是中止当前虚拟机，虚拟机都被中止了，finally代码块自然不会执行。
            * java线程分为两类，守护线程和非守护线程。当所有的非守护线程中止时，不论存不存在守护线程，虚拟机都会kill掉守护线程从而中止程序。 虚拟机中，执行main方法的线程就是一个非守护线程，垃圾回收则是另一个守护线程，main执行完，程序就中止了，而不管垃圾回收线程是否中止。 所以，如果守护线程中存在finally代码块，那么当所有的非守护线程中止时，守护线程被kill掉，其finally代码块是不会执行的。
            * */
            sum +=10;
        }
        return sum;
    }
}
